数据结构 作业1、算法的复杂度
开始时间09/09/2024 12:00:00 AM
结束时间12/25/2024 11:59:00 PM
答题时长155519分钟
答卷类型标准答案
试卷总分100
单选题58 分
2-1

下列函数中,哪两个函数具有相同的增长速度:

| 参考答案
答案
D
2分
2-2

下列哪个函数是O(N)O(N)的?

| 参考答案
答案
A
2分
2-3

给定N×N×NN\times N\times N的三维数组A,则在不改变数组的前提下,查找最小元素的时间复杂度是:

| 参考答案
答案
D
2分
2-4

程序P1和P2时间复杂度的递推公式:

P1: T(1)=1T(1)=1, T(N)=T(N/2)+1T(N)=T(N/2)+1;

P2: T(1)=1T(1)=1, T(N)=2T(N/2)+1T(N)=2T(N/2)+1;

则下列关于两程序时间复杂度的结论中最准确的是:

| 参考答案
答案
B
2分
2-5

斐波那契数列FNF_N的定义为:F0=0F_0=0, F1=1F_1=1, FN=FN1+FN2F_N=F_{N-1}+F_{N-2}, NN=2, 3, …。用递归函数计算FNF_N的时间复杂度是:

| 参考答案
答案
D
2分
2-6

斐波那契数列FNF_N的定义为:F0=0F_0=0, F1=1F_1=1, FN=FN1+FN2F_N=F_{N-1}+F_{N-2}, NN=2, 3, …。用递归函数计算FNF_N的空间复杂度是:

| 参考答案
答案
B
2分
2-7

For the following piece of code

for(i=0; i<n; i++)
  for(j=i; j>0; j/=2)
     printf(“%d\n”, j);

the time complexity is:

| 参考答案
答案
D
2分
2-8

在数据结构中,从逻辑上可以把数据结构分成( )。

| 参考答案
答案
C
2分
2-9

算法的时间复杂度取决于( )。

| 参考答案
答案
D
2分
2-10

以下数据结构中,( )是非线性数据结构。

| 参考答案
答案
A
2分
2-11

下列各种数据结构中属于线性结构的有()

| 参考答案
答案
C
2分
2-12

以下说法正确的是( )。

| 参考答案
答案
D
2分
2-13

下面程序段的时间复杂度是()。

x=90;
y=100;
while(y>0)
    if(x>100)
        { x=x-10; y--; }
    else x++;
| 参考答案
答案
A
2分
2-14

下面代码段的时间复杂度是()。

for ( i=0; i<n; i++ )
    for ( j=0; j<m; j++ )
        a[i][j]=0;
| 参考答案
答案
B
2分
2-15

下面代码段的时间复杂度是()。

i=1;
while( i<=n )
    i=i*3;
| 参考答案
答案
D
2分
2-16

下面代码段的时间复杂度是()。

x=n; //n>1
y=0;
while( x≥(y+1)*(y+1) )
    y++;
| 参考答案
答案
B
2分
2-17

下列代码

if ( A > B ) {
    for ( i=0; i<N; i++ )
        for ( j=N*N; j>i; j-- )
            A += B;
}
else {
    for ( i=0; i<N*2; i++ )
        for ( j=N*2; j>i; j-- )
            A += B;
}

的时间复杂度是:

| 参考答案
答案
C
2分
2-18

Which one of the following is the lowest upper bound of T(n)T(n) for the following recursion T(n)=2T(n/2)+nlognT(n) = 2T(n/2) + n\log n?

| 参考答案
答案
B
2分
2-19

Given the following four algorithms with their runtimes for problem size 100 and their time complexities:

Algorithm Runtime Time Complexity
A 100 O(N)O(N)
B 30 O(N2)O(N^2)
C 30 O(N3)O(N^3)
D 10 O(N4)O(N^4)

Which algorithm is the fastest for problem size 200?

| 参考答案
答案
B
2分
2-20

Given the following four algorithms with their runtimes for problem size 100 and their time complexities:

Algorithm Runtime Time Complexity
A 100 O(N)O(N)
B 50 O(N2)O(N^2)
C 25 O(N3)O(N^3)
D 10 O(N4)O(N^4)

Which algorithm is the fastest for problem size 200?

| 参考答案
答案
D
2分
2-21

Given the following four algorithms with their runtimes for problem size 100 and their time complexities:

Algorithm Runtime Time Complexity
A 100 O(N)O(N)
B 50 O(N2)O(N^2)
C 20 O(N3)O(N^3)
D 15 O(N4)O(N^4)

Which algorithm is the fastest for problem size 200?

| 参考答案
答案
C
2分
2-22

下面的程序段违反了算法的()原则。

void sam()
{  int n=2;
   while (n%2==0)    n+=2;
   printf(“%d”,n);
}
| 参考答案
答案
A
2分
2-23

下列程序的时间复杂度为()。

i = 0; s = 0;
while(s < n)
{
  i++;
  s = s + i;
}

| 参考答案
答案
A
2分
2-24

下列程序段的时间复杂度为()。

x = n;     /*n > 1*/
y = 0;
while(x >= (y + 1) * (y + 1))
     y = y + 1;
| 参考答案
答案
B
2分
2-25

求整数n(n>=0)的阶乘的算法如下,其时间复杂度为( )。

long fact(long n)
{
if (n<=1) return 1;
return n*fact(n-1);
}
| 参考答案
答案
C
2分
2-26

下列复杂度表示法中,( )表示算法复杂度渐近的紧的界,即一种算法的复杂度与某个函数的阶相等。

| 参考答案
答案
B
2分
2-27

下面算法所执行的加法次数( )。

输入:nn,其中n=2tn = 2^ttt为正整数

输出:kk

k←0
while n>=1 do
    for j←1 to n do
        k=k+1
    n←n/2
return k
| 参考答案
答案
D
2分
2-28

已知求平方根函数sqrt(n)sqrt(n)的计算在O(1)O(1)时间内完成,下面算法的时间复杂度是( )。

Algorithm PrimalityTest

Inputn,n2n, n \geq 2

Output:true/false

s←sqrt(n)
for j←2 to s do
    if (n mod j==0) then
        return false
return true
| 参考答案
答案
B
2分
2-29

T(n)表示当输入规模为n时的算法效率,以下算法中效率最优的是( )。

| 参考答案
答案
C
2分
填空题21 分
4-1

算法效率的比较

假设为解决某问题而设计的若干算法的时间复杂度分别为:

A) O(n)O(n)
B) O(n2)O(n^2)
C) O(log2n)O(\log_{2}n)
D) O(nlog2n)O(n \log_{2}n)
E) O(2n)O(2^n)
F) O(n)O(\sqrt {n})
G) O(n!)O(n!)
H) O(1)O(1)
I) O(nn)O(n \sqrt {n})
J) O(nn)O(n ^ n)

这些算法按效率由高到低的顺序是

3分


注:请填大写字母。

| 参考答案
填空#1
HCFADIBEGJ
| 评测详情
填空详情
3分
4-2

算法的量度

(1) 算法所需执行时间的量度称为

3分

(2) 算法所需存储空间的量度称为

3分

| 参考答案
填空#1
时间复杂度
填空#2
空间复杂度
| 评测详情
填空详情
6分
4-3

渐近分析表示法

以时间复杂度为例,

1分
表示算法运行时间的上限,标识一种算法可能有的最高增长率。其严格的数学定义为:对非负函数 T(n)T(n)f(n)f(n),若存在两个正常数 ccn0n_0,对于任意 n>n0n > n_0 都有 T(n)cf(n)T(n) \leq cf(n),则称T(n)T(n)在集合
1分
中,记作:T(n)=T(n) =
1分

以时间复杂度为例,

1分
表示算法运行时间的下限,标识一种算法可能有的最低增长率。其严格的数学定义为:对非负函数 T(n)T(n)f(n)f(n),若存在两个正常数 ccn0n_0,对于任意 n>n0n > n_0 都有 T(n)cf(n)T(n) \geq cf(n),则称T(n)T(n)在集合
1分
中,记作:T(n)=T(n) =
1分

A) 大OO表示法
B) 大Ω\Omega表示法
C) O(f(n))O(f(n))
D) Ω(f(n))\Omega(f(n))

| 参考答案
填空#1
A
填空#2
C
填空#3
C
填空#4
B
填空#5
D
填空#6
D
| 评测详情
填空详情
6分
4-4

下面程序段的时间复杂度是

3分

s =0;
for( i =0; i<n; i++)
    for(j=0;j<n;j++)
           s +=B[i][j];
sum = s ;
| 参考答案
填空#1
O(n2) | O(n^2)
| 评测详情
填空详情
3分
4-5

请写出下面程序段的时间复杂度为O(

3分

void fun(int n)

{

int i=1;
while(i<n)
    i*=3

}

| 参考答案
填空#1
logn | log n | log(n) | log3n | log3(n) | [log3n]
| 评测详情
填空详情
3分
程序填空题21 分
5-1

测量算法的运行时间

下面的程序测量某个函数 F 的运行时间。

请在空白处填写适当内容,完成该程序。

#include <stdio.h>
#include < 
5分
> int F(int x); int main() { int x, y; clock_t t1, t2; double t; scanf("%d", &x); t1 =
5分
; y = F(x); t2 =
5分
; t =
6分
; printf("%d\n", y); printf("It took %.2f second(s).\n", t); return 0; } int F(int x) { ...(略)... }

输入样例

25

输出样例

3712
It took 0.18 second(s)

注:图中数据仅为样例,实际结果可能不同。

| 参考答案
填空#1
time.h
填空#2
clock()
填空#3
clock()
填空#4
(t2 - t1) / (double)CLOCKS_PER_SEC
| 评测详情
填空详情
21分